package org.mbds.android.geometry;

import java.util.ArrayList;

public class MyMath {
	public static int[] SommeDeDeuxCarreInferieurAN(int N){
		
		int[] a=new int[N+1];
		a[0]=1;
		a[1]=1;

		
		for(int i=2 ;i<N+1;i++){
			ArrayList<long[]> x=DecompositionEnFacteurPremier(i);
			int sucess=1;
			for(int j=0;j<x.size();j++){
				if((x.get(j)[0]%4==3)
						&& (x.get(j)[1]%2==1)){
					sucess=0;
				}
			}
			if(sucess==1){
				a[i]=1;
			}
		}
		return a;
	}
	public static ArrayList<Integer> SommeDeDeuxCarreInferieurANList(int N){
		
		ArrayList<Integer> a=new ArrayList<Integer>();
		a.add(new Integer(0));
		a.add(new Integer(1));

		
		for(int i=2 ;i<N+1;i++){
			ArrayList<long[]> x=DecompositionEnFacteurPremier(i);
			int sucess=1;
			for(int j=0;j<x.size();j++){
				if((x.get(j)[0]%4==3)
						&& (x.get(j)[1]%2==1)){
					sucess=0;
				}
			}
			if(sucess==1){
				a.add(new Integer(i));
			}
		}
		return a;
	}
	
	public  static ArrayList<long[]> DecompositionEnFacteurPremier(long n){
		 ArrayList<long[]> resu=new  ArrayList<long[]>();
		 for (long i = 2; i <= java.lang.Math.floor(java.lang.Math.sqrt(n)); i++) {
			 boolean ok=false;
			 long[] factadd=new long[2];
	       	 factadd[0]=i;
	       	 factadd[1]=0;
	         while (n % i == 0) {
	        	 ok=true;
	        	 factadd[1]++;
	             n = n / i;
	         }
	         if(ok){
	        	 resu.add(factadd);
	         }
	         
	     }
		 if(n!=1){
			 long[] factadd=new long[2];
	       	 factadd[0]=n;
	       	 factadd[1]=1;
			 resu.add(factadd);
		 }
		return resu;
	}
}
